package com.docmgmt.mvp.entity;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;

/**
 * <p>
 * 审计日志表（v3.0新增，仅记录28种敏感操作，保留365天）
 * </p>
 *
 * @author Dora
 */
@Getter
@Setter
@Accessors(chain = true)
@TableName("sys_audit_log")
public class AuditLogEntity implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 审计日志ID
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 操作类型（28种敏感操作）
     */
    @TableField("operation")
    private String operation;

    /**
     * 风险等级
     */
    @TableField("risk_level")
    private String riskLevel;

    /**
     * 操作人ID
     */
    @TableField("operator_id")
    private Long operatorId;

    /**
     * 操作人姓名（冗余，防止用户删除后无法追溯）
     */
    @TableField("operator_name")
    private String operatorName;

    /**
     * 操作人角色（冗余）
     */
    @TableField("operator_role")
    private String operatorRole;

    /**
     * 资源类型：user/file/folder/kb/config
     */
    @TableField("resource_type")
    private String resourceType;

    /**
     * 资源ID
     */
    @TableField("resource_id")
    private Long resourceId;

    /**
     * 资源名称（冗余）
     */
    @TableField("resource_name")
    private String resourceName;

    /**
     * 操作详情（JSON格式，包含before/after值）
     */
    @TableField("action_detail")
    private String actionDetail;

    /**
     * 受影响的用户ID（如重置密码、授权等）
     */
    @TableField("affected_user_id")
    private Long affectedUserId;

    /**
     * 受影响的用户姓名（冗余）
     */
    @TableField("affected_user_name")
    private String affectedUserName;

    /**
     * IP地址
     */
    @TableField("ip_address")
    private String ipAddress;

    /**
     * User-Agent
     */
    @TableField("user_agent")
    private String userAgent;

    /**
     * 请求ID（用于关联多条日志）
     */
    @TableField("request_id")
    private String requestId;

    /**
     * 执行状态
     */
    @TableField("status")
    private String status;

    /**
     * 错误信息（失败时记录）
     */
    @TableField("error_message")
    private String errorMessage;

    /**
     * 执行时间（毫秒）
     */
    @TableField("execution_time_ms")
    private Integer executionTimeMs;

    /**
     * 操作时间
     */
    @TableField(value = "created_at", fill = FieldFill.INSERT)
    private LocalDateTime createdAt;

    /**
     * 审计人ID（用于标记已审核）
     */
    @TableField("reviewed_by")
    private Long reviewedBy;

    /**
     * 审计时间
     */
    @TableField("reviewed_at")
    private LocalDateTime reviewedAt;

    /**
     * 审计备注
     */
    @TableField("review_notes")
    private String reviewNotes;
}
